package com.wsd.music.controller;

import com.wsd.music.entity.SongList;
import com.wsd.music.service.SongListService;
import com.wsd.music.utils.Message;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/songList")
public class SongListController {

    @Resource
    SongListService service;

    /**
     * 添加歌单信息
     * @param songList
     * @return
     */
    @PostMapping("/register")
    public Object addSongList(@RequestBody SongList songList) {
        if (null != songList) {
            if (service.insert(songList)) {
                // 添加成功
                return Message.simpleMessage("1", "添加成功");
            }
            return Message.simpleMessage("0", "添加失败");
        }
        return null;
    }

    /**
     * 修改歌单信息
     * @param songList
     * @return
     */
    @PostMapping("/update")
    public Object updateSongList(@RequestBody SongList songList) {
        if (null != songList) {
            if (service.modify(songList)) {
                // 修改成功
                return Message.simpleMessage("1", "添加成功");
            }
            // 修改失败
            return Message.simpleMessage("0", "添加失败");
        }
        return null;
    }

    /**
     * 通过ID删除歌单
     * @param id
     * @return
     */
    @GetMapping("/delete")
    public Object deleteSongListById(Integer id) {
        System.out.println(id);
        if (null == id || id < 0) {
            return null;
        }
        return service.delete(id);
    }

    /**
     * 通过歌单ID查询歌单信息
     * @param id
     * @return
     */
    @GetMapping("/selectById")
    public Object selectById(Integer id) {
        if (null != id) {
            return service.selectById(id);
        }
        return null;
    }

    /**
     * 查询所有歌单信息
     * @return
     */
    @RequestMapping("/selectAll")
    public Object selectAll() {
        return service.selectAll();
    }

    /**
     * 根据title模糊查询
     * @param title 歌单标题
     * @return
     */
    @RequestMapping("/selectByTitle")
    public Object selectByTitle(String title) {
        return service.selectSongListByTitle(title);
    }

    /**
     * 根据title精确查询
     * @param title 歌单标题
     * @return
     */
    @RequestMapping("/getByTitle")
    public Object selectAccurateByTitle(String title) {
        return service.selectSongListAccurateByTitle(title);
    }

    /**
     * 根据type模糊查询
     * @param type 歌单类型
     * @return
     */
    @RequestMapping("/selectByType")
    public Object selectByType(String type) {
        return service.selectSongListByType(type);
    }



    /**
     * 接收上传的头像文件，将头像文件放入文件夹并修改数据库信息
     * @param avatar
     * @param id
     * @return
     */
    @PostMapping("updateSongListPic")
    public Object updateSongListPic(@RequestParam("file") MultipartFile avatar, Integer id) {
        if (null != avatar && null != id) {
            String fileName = System.currentTimeMillis() + avatar.getOriginalFilename();
            // G:\Java\music\img\songListPic
            String filePath = System.getProperty("user.dir") +
                    System.getProperty("file.separator") +
                    "img" +
                    System.getProperty("file.separator") +
                    "songListPic";

            // File类代表磁盘文件本身，操作目录和文件都可以通过File来完成
            File file = new File(filePath);
            if (!file.exists()) {
                // 如果不存在该文件夹，创建一个新的文件夹
                file.mkdir();
            }
            // 实际文件地址
            // G:\Java\music\img\songListPic\{fileName}
            File desk = new File(filePath + System.getProperty("file.separator") + fileName);
            // 将文件存储到指定目录
            try {
                avatar.transferTo(desk);
            } catch (IOException e) {
                return Message.simpleMessage("0", e.getMessage());
            }

            // 更新数据库中的文件
            SongList songList = new SongList();
            songList.setId(id);
            songList.setPic("img" +
                    System.getProperty("file.separator") +
                    "songListPic"+
                    System.getProperty("file.separator") +
                    fileName);
            return service.modify(songList) ?
                    Message.simpleMessage("1", "添加成功") :
                    Message.simpleMessage("0", "添加失败");
        }
        return null;
    }


}
